# knitr::opts_chunk$set(echo = TRUE)
# knitr::opts_chunk$set(fig.width=10)
library(plyr, warn.conflicts = FALSE)
library(ggplot2, warn.conflicts = FALSE)
library(stringr, warn.conflicts = FALSE)
library(plotly, warn.conflicts = FALSE)
setwd("~/workspace/repos/thread-lock-analysis/R Overview/")
data = read.csv(header = FALSE, "thread_data.csv", col.names = c("ID", "Name", "Prio", "State", "Time"))
data$NewState = sapply(data$State, function(x) {
if(str_count(x, "wait") > 0) {
"Waiting"
}else "Running"
})
data$ID = as.character(data$ID)
data$Name = sapply(data$Name, function(x) {
name = str_split(x, " from", simplify = TRUE)[1]
name
# print(str_sub(name, 1, 20), str_sub(name, 21, length(name)))
# paste(str_sub(name, 1, 20), str_sub(name, 21, length(name)), sep = "\n")
})
plot = function(data) {
g <- data %>% ggplot(aes(Date, freq)) +
geom_line(aes(color=NewState)) +
labs(colour="State") +
ylab("No. Of Threads") +
xlab("Date/Time") +
ggtitle("Frequency of Running vs. Waiting Threads Over Time")
ggplotly(g, tooltip = "all")
}
freq_data = count(data, vars=c("NewState", "Time"))
freq_data$Date = as.POSIXct(freq_data$Time, origin="1970-01-01")
plot(freq_data)
ids = data$ID %>% unique
for(id in ids) {
len = data[data$ID == id,]$NewState %>% unique %>% length
if(len > 1) print(id)
}
[1] "139938960125952"
[1] "139938960011264"
[1] "139939373475840"
[1] "139939295565824"
[1] "139940259768320"
[1] "139940256282624"
[1] "139940246902784"
[1] "139939698210816"
[1] "139939632334848"
[1] "139940248473600"
dd = data[data$ID == '139939698210816',]
dd$NewState = as.factor(dd$NewState)
dd$group = 1
my_data = dd
my_data$Time = as.POSIXct(my_data$Time, origin="1970-01-01")
my_data %>% ggplot(aes(Time, NewState, group = group)) +
geom_point(aes(color=my_data$Name)) +
scale_y_discrete(limits = rev(levels(my_data$NewState))) +
# theme(legend.position = "top") +
labs(colour="Thread Name") +
theme_bw() +
theme(legend.text=element_text(size=7), legend.position = "top") +
ylab("State") +
xlab("Time") +
ggtitle(paste("Thread ID ", my_data$ID)) +
guides(colour = guide_legend(nrow = 2, title.position = "top"))

NA
NA
my_data = data[data$ID == '139938960125952',]
my_data$NewState = as.factor(my_data$NewState)
my_data$group = 1
my_data %>% ggplot(aes(Time, NewState, group = group)) +
geom_line(aes(color=my_data$Name)) +
scale_y_discrete(limits = rev(levels(my_data$NewState))) +
labs(colour="Thread Name") +
theme_bw() +
theme(legend.text=element_text(size=7)) +
ylab("State") +
xlab("Time") +
ggtitle(paste("Thread ID ", my_data$ID))

g <- my_data %>% ggplot(aes(Time, NewState, group = group)) +
geom_point(aes(color=my_data$Name)) +
scale_y_discrete(limits = rev(levels(my_data$NewState))) +
labs(colour="Thread Name") +
theme_bw() +
theme(legend.text=element_text(size=6), legend.title = element_text(size=7), legend.position = "top", legend.title.align = 0) +
ylab("State") +
xlab("Time") +
ggtitle(paste("Thread ID ", my_data$ID))
g

freq_data = count(data, vars=c("Prio", "Time"))
freq_data$Date = as.POSIXct(freq_data$Time, origin="1970-01-01")
freq_data$Prio = freq_data$Prio %>% sapply(function(x){if(x == -1){"Missing"}else{x}})
freq_data$Prio = as.factor(freq_data$Prio)
g <- freq_data %>% ggplot(aes(Date, freq)) +
geom_line(aes(color=Prio)) +
labs(colour="Priority") +
ylab("No. Of Threads") +
xlab("Date/Time") +
ggtitle("Frequency of Threads With Diff. Priorities Over Time")
ggplotly(g, tooltip = "all")
LS0tCnRpdGxlOiAiU29tZSBQbG90cyBFeHBsb3JpbmcgQSBKZW5raW5zIFRocmVhZCBEdW1wIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGhpZ2hsaWdodDogdGFuZ28KICAgIHRoZW1lOiB1bml0ZWQKLS0tCgpgYGB7ciByZXN1bHRzPSdoaWRlJywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBrbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpCiMga25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aD0xMCkgCmxpYnJhcnkocGx5ciwgd2Fybi5jb25mbGljdHMgPSBGQUxTRSkKbGlicmFyeShnZ3Bsb3QyLCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQpsaWJyYXJ5KHN0cmluZ3IsIHdhcm4uY29uZmxpY3RzID0gRkFMU0UpCmxpYnJhcnkocGxvdGx5LCB3YXJuLmNvbmZsaWN0cyA9IEZBTFNFKQoKc2V0d2QoIn4vd29ya3NwYWNlL3JlcG9zL3RocmVhZC1sb2NrLWFuYWx5c2lzL1IgT3ZlcnZpZXcvIikKYGBgCgpgYGB7ciBtZXNzYWdlPUZBTFNFLCBjYWNoZT1UUlVFfQpkYXRhID0gcmVhZC5jc3YoaGVhZGVyID0gRkFMU0UsICJ0aHJlYWRfZGF0YS5jc3YiLCBjb2wubmFtZXMgPSBjKCJJRCIsICJOYW1lIiwgIlByaW8iLCAiU3RhdGUiLCAiVGltZSIpKQpkYXRhJE5ld1N0YXRlID0gc2FwcGx5KGRhdGEkU3RhdGUsIGZ1bmN0aW9uKHgpIHsKICBpZihzdHJfY291bnQoeCwgIndhaXQiKSA+IDApIHsKICAgICJXYWl0aW5nIgogIH1lbHNlICJSdW5uaW5nIgp9KQpkYXRhJElEID0gYXMuY2hhcmFjdGVyKGRhdGEkSUQpCmRhdGEkTmFtZSA9IHNhcHBseShkYXRhJE5hbWUsIGZ1bmN0aW9uKHgpIHsKICBzdHJfc3BsaXQoeCwgIiBmcm9tIiwgc2ltcGxpZnkgPSBUUlVFKVsxXQp9KQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIGNhY2hlPVRSVUV9CnBsb3QgPSBmdW5jdGlvbihkYXRhKSB7CiAgZyA8LSBkYXRhICU+JSBnZ3Bsb3QoYWVzKERhdGUsIGZyZXEpKSArIAogICAgZ2VvbV9saW5lKGFlcyhjb2xvcj1OZXdTdGF0ZSkpICsKICAgIGxhYnMoY29sb3VyPSJTdGF0ZSIpICsKICAgIHlsYWIoIk5vLiBPZiBUaHJlYWRzIikgKwogICAgeGxhYigiRGF0ZS9UaW1lIikgKwogICAgZ2d0aXRsZSgiRnJlcXVlbmN5IG9mIFJ1bm5pbmcgdnMuIFdhaXRpbmcgVGhyZWFkcyBPdmVyIFRpbWUiKQogIGdncGxvdGx5KGcsIHRvb2x0aXAgPSAiYWxsIikKfQpmcmVxX2RhdGEgPSBjb3VudChkYXRhLCB2YXJzPWMoIk5ld1N0YXRlIiwgIlRpbWUiKSkKZnJlcV9kYXRhJERhdGUgPSBhcy5QT1NJWGN0KGZyZXFfZGF0YSRUaW1lLCBvcmlnaW49IjE5NzAtMDEtMDEiKQpwbG90KGZyZXFfZGF0YSkKYGBgCgoKYGBge3IgbWVzc2FnZT1GQUxTRSwgY2FjaGU9VFJVRX0KaWRzID0gZGF0YSRJRCAlPiUgdW5pcXVlCmZvcihpZCBpbiBpZHMpIHsKICBsZW4gPSBkYXRhW2RhdGEkSUQgPT0gaWQsXSROZXdTdGF0ZSAlPiUgdW5pcXVlICU+JSBsZW5ndGgKICBpZihsZW4gPiAxKSBwcmludChpZCkKfQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGRwaT0xMjB9CgpkZCA9IGRhdGFbZGF0YSRJRCA9PSAnMTM5OTM5Njk4MjEwODE2JyxdCmRkJE5ld1N0YXRlID0gYXMuZmFjdG9yKGRkJE5ld1N0YXRlKQpkZCRncm91cCA9IDEKCm15X2RhdGEgPSBkZApteV9kYXRhJFRpbWUgPSBhcy5QT1NJWGN0KG15X2RhdGEkVGltZSwgb3JpZ2luPSIxOTcwLTAxLTAxIikKbXlfZGF0YSAlPiUgZ2dwbG90KGFlcyhUaW1lLCBOZXdTdGF0ZSwgZ3JvdXAgPSBncm91cCkpICsgCiAgZ2VvbV9wb2ludChhZXMoY29sb3I9bXlfZGF0YSROYW1lKSkgKyAKICBzY2FsZV95X2Rpc2NyZXRlKGxpbWl0cyA9IHJldihsZXZlbHMobXlfZGF0YSROZXdTdGF0ZSkpKSArCiAgIyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAidG9wIikgKwogIGxhYnMoY29sb3VyPSJUaHJlYWQgTmFtZSIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT03KSwgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICB5bGFiKCJTdGF0ZSIpICsKICB4bGFiKCJUaW1lIikgKwogIGdndGl0bGUocGFzdGUoIlRocmVhZCBJRCAiLCBteV9kYXRhJElEKSkgKwogIGd1aWRlcyhjb2xvdXIgPSBndWlkZV9sZWdlbmQobnJvdyA9IDIsIHRpdGxlLnBvc2l0aW9uID0gInRvcCIpKQogIAogIApgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGRwaT0xMjB9Cm15X2RhdGEgPSBkYXRhW2RhdGEkSUQgPT0gJzEzOTkzODk2MDEyNTk1MicsXQpteV9kYXRhJE5ld1N0YXRlID0gYXMuZmFjdG9yKG15X2RhdGEkTmV3U3RhdGUpCm15X2RhdGEkZ3JvdXAgPSAxCgpteV9kYXRhICU+JSBnZ3Bsb3QoYWVzKFRpbWUsIE5ld1N0YXRlLCBncm91cCA9IGdyb3VwKSkgKyAKICBnZW9tX2xpbmUoYWVzKGNvbG9yPW15X2RhdGEkTmFtZSkpICsgCiAgc2NhbGVfeV9kaXNjcmV0ZShsaW1pdHMgPSByZXYobGV2ZWxzKG15X2RhdGEkTmV3U3RhdGUpKSkgKwogIGxhYnMoY29sb3VyPSJUaHJlYWQgTmFtZSIpICsKICB0aGVtZV9idygpICsKICB0aGVtZShsZWdlbmQudGV4dD1lbGVtZW50X3RleHQoc2l6ZT03KSkgKwogIHlsYWIoIlN0YXRlIikgKwogIHhsYWIoIlRpbWUiKSArCiAgZ2d0aXRsZShwYXN0ZSgiVGhyZWFkIElEICIsIG15X2RhdGEkSUQpKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGRwaT0xMjB9CmcgPC0gbXlfZGF0YSAlPiUgZ2dwbG90KGFlcyhUaW1lLCBOZXdTdGF0ZSwgZ3JvdXAgPSBncm91cCkpICsgCiAgZ2VvbV9wb2ludChhZXMoY29sb3I9bXlfZGF0YSROYW1lKSkgKyAKICBzY2FsZV95X2Rpc2NyZXRlKGxpbWl0cyA9IHJldihsZXZlbHMobXlfZGF0YSROZXdTdGF0ZSkpKSArCiAgbGFicyhjb2xvdXI9IlRocmVhZCBOYW1lIikgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTYpLCBsZWdlbmQudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZT03KSwgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIsIGxlZ2VuZC50aXRsZS5hbGlnbiA9IDApICsKICB5bGFiKCJTdGF0ZSIpICsKICB4bGFiKCJUaW1lIikgKwogIGdndGl0bGUocGFzdGUoIlRocmVhZCBJRCAiLCBteV9kYXRhJElEKSkKZwpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGRwaT0xMjAsIGZpZy53aWR0aD04LCBmaWcuYWxpZ249J2NlbnRlcid9CmZyZXFfZGF0YSA9IGNvdW50KGRhdGEsIHZhcnM9YygiUHJpbyIsICJUaW1lIikpCmZyZXFfZGF0YSREYXRlID0gYXMuUE9TSVhjdChmcmVxX2RhdGEkVGltZSwgb3JpZ2luPSIxOTcwLTAxLTAxIikKZnJlcV9kYXRhJFByaW8gPSBmcmVxX2RhdGEkUHJpbyAlPiUgc2FwcGx5KGZ1bmN0aW9uKHgpe2lmKHggPT0gLTEpeyJNaXNzaW5nIn1lbHNle3h9fSkKZnJlcV9kYXRhJFByaW8gPSBhcy5mYWN0b3IoZnJlcV9kYXRhJFByaW8pCgpnIDwtIGZyZXFfZGF0YSAlPiUgZ2dwbG90KGFlcyhEYXRlLCBmcmVxKSkgKyAKICAgIGdlb21fbGluZShhZXMoY29sb3I9UHJpbykpICsKICAgIGxhYnMoY29sb3VyPSJQcmlvcml0eSIpICsKICAgIHlsYWIoIk5vLiBPZiBUaHJlYWRzIikgKwogICAgeGxhYigiRGF0ZS9UaW1lIikgKwogICAgZ2d0aXRsZSgiRnJlcXVlbmN5IG9mIFRocmVhZHMgV2l0aCBEaWZmLiBQcmlvcml0aWVzIE92ZXIgVGltZSIpIAoKZ2dwbG90bHkoZywgdG9vbHRpcCA9ICJhbGwiKQpgYGAKCg==